From: Rui Matos Date: Wed, 6 Jul 2011 19:43:49 +0000 (+0100) Subject: runDialog: catch exceptions from Gio.app_info_launch_default_for_uri() X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~8029 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=d12dd1491f8a31c40de50b958c500208b4c2980d;p=gnome-shell.git runDialog: catch exceptions from Gio.app_info_launch_default_for_uri() An uncaught exception here would mean that the dialog wouldn't close. https://bugzilla.gnome.org/show_bug.cgi?id=653700 --- diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js index 5152ecb7b..bd6fc25ae 100644 --- a/js/ui/runDialog.js +++ b/js/ui/runDialog.js @@ -333,33 +333,46 @@ __proto__: ModalDialog.ModalDialog.prototype, if (GLib.file_test(path, GLib.FileTest.EXISTS)) { let file = Gio.file_new_for_path(path); - Gio.app_info_launch_default_for_uri(file.get_uri(), - global.create_app_launch_context()); - } else { - this._commandError = true; - - this._errorMessage.set_text(e.message); - - if (!this._errorBox.visible) { - let [errorBoxMinHeight, errorBoxNaturalHeight] = this._errorBox.get_preferred_height(-1); - - let parentActor = this._errorBox.get_parent(); - Tweener.addTween(parentActor, - { height: parentActor.height + errorBoxNaturalHeight, - time: DIALOG_GROW_TIME, - transition: 'easeOutQuad', - onComplete: Lang.bind(this, - function() { - parentActor.set_height(-1); - this._errorBox.show(); - }) - }); + try { + Gio.app_info_launch_default_for_uri(file.get_uri(), + global.create_app_launch_context()); + } catch (e) { + // The exception from gjs contains an error string like: + // Error invoking Gio.app_info_launch_default_for_uri: No application + // is registered as handling this file + // We are only interested in the part after the first colon. + let message = e.message.replace(/[^:]*: *(.+)/, '$1'); + this._showError(message); } + } else { + this._showError(e.message); } } } }, + _showError : function(message) { + this._commandError = true; + + this._errorMessage.set_text(message); + + if (!this._errorBox.visible) { + let [errorBoxMinHeight, errorBoxNaturalHeight] = this._errorBox.get_preferred_height(-1); + + let parentActor = this._errorBox.get_parent(); + Tweener.addTween(parentActor, + { height: parentActor.height + errorBoxNaturalHeight, + time: DIALOG_GROW_TIME, + transition: 'easeOutQuad', + onComplete: Lang.bind(this, + function() { + parentActor.set_height(-1); + this._errorBox.show(); + }) + }); + } + }, + open: function() { this._history.lastItem(); this._errorBox.hide();